<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type"
 content="text/html; charset=ISO-8859-1">
  <title>Task Types</title>
</head>
<body>
<h1>Task Types</h1>
Task Types describe standard procedures that a company may adopt for
dealing with common types of tasks. In some environments it is not
appropriate to restrict oneself to a rigid procedure and for this
reason, the task types can be configured to any degree, from the very
basic default one which has no real states in it at all up to a very
complicated state machine with multiple possible paths.<br>
<br>
Where they are appropriate, the correct use of task types will help you
to process tasks according to your defined procedures and maintain a
change log recording each of the steps taken along the way. This is a
real advantage when working with a Quality System.<br>
<br>
An additional bonus is that the task type mechanism can allow the
system to automatically assign responsibility at the appropriate time
to different users of the task. This is achieved in a generic way by
specifying which Roles are responsible for a task at each stage. Any
user who is assigned into the list of roles responsible for a task at
any time will be added to the list of people responsible for the
task. Note that it is always possible (with the right permission) to
override the current selection of responsible entities so that the
system can be used completely manually.<br>
<br>
In addition to the set of responsible Roles, a transition may assign
responsibility to the user making the transition or the Contactable who
is currently marked as the Owner of the task.<br>
<br>
A task type also has a set of interested Roles. Whenever a task is
assigned a new task type (during creation or editing) then any users
who are assigned to any of the interested Roles will be added to the
interested set for the task and hence be automatically notified of the
creation and modification of the task. For instance, anyone in the
Project Manager role could notified of the creation of a task of type
Critical Error. Another example is a Moderator being automatically
assigned whenever a new issue of type Bug is created.<br>
<br>
A task type is defined as a state machine. A state machine consists of
a number of states with transitions between them. A transition defines
a start state, and end state, a status and a list of responsible roles.
The way to understand this is that the start state is where the task
was. The status is why you are taking the transition. The end state is
where the task is going next. The list of responsible roles will
determine who is automatically assigned responsibility to the task when
it takes the transition. Note that it is possible to have multiple
transitions from one state to another differing only in status or
roles. Typically, from any state, the user will have a choice of
different transitions that can be taken an they are the decision
mechanism for taking different routes through the state machine.<br>
<br>
A task state machine can only have one entry point, ie only a single
transition from the start state. It is, however, possible to leave the
state machine in any number of transitions. A terminating transition
ends back in the start state and you can reenter the state machine from
this state if necessary. When a task type is assigned to a task, the
first transition from the start state is automatically taken.<br>
<br>
Note that it makes sense to have a relatively small number of
terminating statuses as these will be useful for finding which tasks
have been completed.
<h2>Creating Task Types</h2>
States, Statuses and Task State Machines need to be created
independently. States and statuses can be reused in multiple different
state machines. They are created in /Root/System Configuration/Setup
Task Types.<br>
<h2>Editing Task Types</h2>
States, Statuses and Task State Machines can be edited independently
with the appropriate permission.<br>
<h2>Editing Task State Machines</h2>
When viewing a Task Type, if the user has permission then the "State
Machine" button will be enabled. This will bring up a state machine
editor. Currently, this editor is non-graphical and is presented as a
table of transitions. The states and statuses for each transition can
be changed by selecting the cell and using the combobox to select the
desired value in each place.<br>
<br>
The list of roles is edited selecting the desired set in a multiple 
selection list.<br>
<br>
The Add button will add a new transition to the end of the list. Each
row contains Delete and Move Up buttons which can be used to delete or
move the current row up one.<br>
<br>
Finally, once all the transitions have been created/edited, press OK at
the bottom of the panel to commit the changes to the state machine. In
this case an appropriate change log will be recorded. Alternatively
press cancel to discard any changes that have been made.<br>
<br>
Note that the table automatically comes with a single transition from
the start state. It will not be possible to change the start state of
this transition. Additionally, it will not be possible to select that
start state for any other transition in the state machine.<br>
</body>
</html>
